package com.billard.websocket;

import com.billard.service.TableService;
import com.billard.vo.TableVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 球台状态发布者
 */
@Component
@Slf4j
public class TableStatusPublisher {
    /**
     * 发布球台状态变更消息
     * 浏览器发起 GET /ws/info → 检查服务器状态、建立会话
     *
     * SockJS 返回 sessionId 和可用传输方式
     *
     * 浏览器再发 GET /ws/{sessionId}/websocket → 完成 WebSocket 升级
     *
     * STOMP 协议建立连接 → 客户端可以订阅 /topic/... 或 /user/...
     * ***/

    //websocket的发送信息工具类
    private final SimpMessagingTemplate messagingTemplate;


    public TableStatusPublisher(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    /**
     * 发布球台状态变更消息
     */
    public void publishTableStatusChange(Long tableId) {
        // 获取所有球台的最新状态
        log.info("发布球台状态变更消息");
        messagingTemplate.convertAndSend("/topic/table-status", tableId);
    }

    /**
     * 发布预约提醒消息
     */
    public void publishReservationReminder(String message) {
        log.info("发布预约提醒消息");
        messagingTemplate.convertAndSend("/topic/reservation-reminder", message);
    }

    /**
     * 发布系统通知消息
     */
    public void publishSystemNotification(String message) {
        log.info("发布系统通知消息{}",message);
        messagingTemplate.convertAndSend("/topic/system-notification", message);
    }

    /**
     * 发布球台状态到指定用户
     */
    public void publishToUser(String username, Object payload) {
        log.info("发布球台状态到指定用户");
        messagingTemplate.convertAndSendToUser(username, "/queue/table-updates", payload);
    }
}


